package io;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲字符输入流:java.io.BufferedReader
 * 缓冲字符输入流内部默认有一个长度为8192的char数组，块读文本数据加速。
 * 并且其还具备按行读取字符串的能力。
 */
public class BRDemo {
    public static void main(String[] args) throws IOException {
        //将当前源代码按行读取出来并输出到控制台上
        FileInputStream fis = new FileInputStream(
           "./src/main/java/io/BRDemo.java"
        );
        InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
        BufferedReader br = new BufferedReader(isr);
        /*
            BufferedReader定义的读取一行字符串的方法:
            String readLine()
            读取一行字符串并返回。返回的字符串末尾不含有这一行的换行符。
            如果读取到了空行(该行只有换行符，没有其他内容)时返回空字符串。
            如果读取到了流的末尾，则返回值为null。

            缓冲流本质是块读文本数据，由于内部默认8192长的char数组，所以当我们
            第一次调用readLine方法时，实际上缓冲流就会一次性读取8192个字符并存入
            到内部数组中，然后将数组中一行字符串返回(从数组第一个字符开始扫描，扫描
            到换行符时停一下，然后将之前的所有字符组成一个字符串返回)。
            当第二次调用readLine时则直接从内部char数组上次停止的位置继续向后扫描
            若干字符直到遇到换行符时停一下，将之前内容组成字符串返回。如此往复。
            直到若干次调用readLine后若将char数组所有内容都使用完毕了，此时缓冲流
            才会再次读取8192个字符回来继续上述工作。
         */
        String line;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        br.close();
    }
}




